# 增删改查处理处
from student_system.student import Student


class StudentManager:
    def __init__(self):
        # 学员列表，保存学员对象（列表中的元素是student对象）
        self.stu_list = []

    # 程序入口函数
    # 进入不同功能
    def run(self):
        self.load_data()
        while True:
            self.menu()
            num = input('输入功能序号:')
            if num == '1':
                self.add_stu()
            elif num == '2':
                self.del_stu()
            elif num == '3':
                self.modify_stu()
            elif num == '4':
                self.search_stu()
            elif num == '5':
                self.show_stu()
            elif num == '6':
                self.save_stu()
            elif num == '7':
                break
            else:
                print("输入有误")

    def add_stu(self):
        print("你的选择是添加学员")
        # 输入信息
        name = input('请输入学员姓名')
        gender = input('请输入学员性别')
        tel = input('请输入学员电话')
        # 将信息封装成对象
        stu = Student(name, gender, tel)
        # 添加到学员列表
        self.stu_list.append(stu)

    def del_stu(self):

        pass

    def modify_stu(self):
        pass

    def search_stu(self):
        print('你的选择是查询学员')
        name = input('请输入姓名')
        for s in self.stu_list:
            if s.name == name:
                print(f'此学员性别为{s.gender},电话为{s.tel}')
                return
        print('查询不到此学员')

    def show_stu(self):
        print("你的选择是展示所有学员信息")
        print('姓名\t性别\t手机号')
        for s in self.stu_list:
            print(f'{s.name}\t{s.gender}\t{s.tel}')

    def save_stu(self):
        print('-------保存学员信息-------')
        # 将列表中的元素（对象）转为字典再存储
        with open('data.txt', 'w', encoding='utf-8') as f:
            # s为student对象,s.__dict__是对象的字典格式数据
            new_data = [s.__dict__ for s in self.stu_list]
            # write函数需要传入str类型的参数
            f.write(str(new_data))
            f.close
        print('保存成功')

    def menu(self):
        print('-' * 20)
        print('1:添加学员')
        print('2:删除学员')
        print('3:修改学员')
        print('4:查询学员')
        print('5:展示所有学员信息')
        print('6:保存信息更改')
        print('7:退出程序')
        print('-' * 20)

    def load_data(self):
        #可能出现异常的代码
        try:
            #以只读模式打开文件
            f=open('data.txt','r')
        #出现异常后执行的代码
        except:
            #以写入模式打开文件
            f=open('data.txt','w')

        #没有异常执行的代码
        else:
            data=f.read()
            #文件中读取的内容都是字符串格式,但内容实质是列表中有字典,需要转换成字典
            new_data=eval(data)
            #将列表中字典存入学员列表，s为字典，讲起转换为student对象
            self.stu_list=[Student(s['name'],s['gender'],s['tel'])for s in new_data]
        #必须运行的代码
        finally:
            f.close()

